/**
 * WanlShop状态管理器 - 系统初始化
 * 
 * @ author 深圳前海万联科技有限公司 <wanlshop@i36k.com> 
 * < 程序仅用作FastAdmin付费插件API测试使用，非FastAdmin购买授权，未经版权所有权人书面许可，不能用于商业用途！>
 * @ link http://www.wanlshop.com
 * @ 2020年9月29日19:00:46
 * @ version 1.0.0
 **/
import config from '../../common/config/config';

export default {
	namespaced: true,
	// 储存数据
	state: {
		appStyle: {}, // APP整体样式
		appConfig: {}, // APP整体配置
		// APP链接
		appUrl: {
			api: config.appurl,
			oss: config.cdnurl
		},
		// APP整体数据
		appInfo: {
			adVersion: '0', // 广告数据版本号	拉取大版本号数据
			serviceVersion: '0' // Api数据版本号  拉取大版本号数据  用于尚未更新用户正常使用
		},
		// 广告数据
		adData: {
			openAdverts: {},
			pageAdverts: [],
			categoryAdverts: [],
			firstAdverts: [],
			otherAdverts: []
		},
		// 模块数据
		modulesData: {
			homeModules: {}, //首页模块
			categoryModules: [], //类目模块
			searchModules: [] //搜索模块
		},
		config: {
			screenshot: false,
			position: true,
			map: true
		},
		version: config.versionName,
		versionCode: config.versionCode
	},
	mutations: {
		setConfig(state, payload) {
			for (let i in payload) {
				for (let j in state.config) {
					if (i === j) {
						state.config[j] = payload[i];
					}
				}
			}
		}
	},
	// 操作数据
	actions: {
		// WanlShop 初始化，检测
		async init({
			state,
			dispatch,
			rootState
		}) {
			let userStorage = uni.getStorageSync('wanlshop:user');
			uni.request({
				url: '/wanlshop/token/check',
				success: (res) => {
					if (res.msg === 'ok') {
						// 已经登录，刷新一个token，将原有账户赋值给状态管理器
						if (userStorage) {
							rootState.user = userStorage;
						}
						rootState.user.isLogin = true;
					} else {
						// 清除登录信息
						let user = rootState.user;
						for (let j in user) {
							user[j] = ''
						}
						rootState.user.isLogin = false;
						// 清除统计信息
						let statistics = rootState.statistics;
						for (let j in statistics) {
							for (let i in statistics[j]) {
								statistics[j][i] = 0
							}
						}
						// 从本地缓存中异步移除
						if (userStorage) {
							uni.removeStorageSync('wanlshop:user');
							uni.removeStorageSync('wanlshop:statis');
						}
					}
					dispatch('getAds');
					dispatch('getServices');
				},
				fail: (e) => {
					// #ifdef APP-PLUS
					plus.navigator.closeSplashscreen(); //主动关闭启动图
					// #endif
				}
			});
			uni.request({
				url: "/index/getversion",
				method: "POST",
				data: {},
				complete: (res) => {
					if (res.res.code == 1) {
						if (!uni.getStorageSync('version')) {
							uni.setStorageSync('version', res.res.data.version)
						} else {
							const versionStorage = uni.getStorageSync('version')
							if (versionStorage != res.res.data.version) {
								uni.showModal({
									title: '提示',
									content: '系统有新的补丁，点击确认按钮进行升级',
									confirmText: "确认",
									showCancel: false,
									success: function(res) {
										if (res.confirm) {
											uni.clearStorageSync();
											//location.reload() 方法用来刷新当前页面。该方法只有一个参数，当值为 true 时，将强制浏览器从服务器加载页面资源，
											//当值为 false 或者未传参时，浏览器则可能从缓存中读取页面。
											window.location.reload(true)
										}
									}
								});

							}
						}

					}
				},
			});
		},
		async getServices({
			state
		}) {
			await uni.request({
				url: '/wanlshop/common/init',
				data: {
					version: state.version
				},
				success: res => {
					// px转rpx正则表达
					for (var i = 0; i < res.data.modulesData.homeModules.item.length; i++) {
						for (var item in res.data.modulesData.homeModules.item[i].style) {
							if (res.data.modulesData.homeModules.item[i].style[item])
								res.data.modulesData.homeModules.item[i].style[item] =
								res.data.modulesData.homeModules.item[i].style[item].toString().replace(
									/\d*\.?\d+px/,
									function(match) {
										return match.replace('px', '') * 2 + 'rpx'
									})
						};
						for (var item in res.data.modulesData.homeModules.item[i].params) {
							if (res.data.modulesData.homeModules.item[i].params[item])
								res.data.modulesData.homeModules.item[i].params[item] =
								res.data.modulesData.homeModules.item[i].params[item].toString()
								.replace(/\d*\.?\d+px/, function(match) {
									return match.replace('px', '') * 2 + 'rpx'
								})
						};
					};
					// 写入全局配置
					state.appConfig = res.data.appConfig;
					// 写入全局样式
					state.appStyle = res.data.appStyle;
					// 写入模块数据
					state.modulesData = res.data.modulesData;
				}
			});
		},
		async getAds({
			state
		}) {
			await uni.request({
				url: '/wanlshop/common/adverts',
				data: {
					version: state.version
				},
				success: res => {
					if (res.data.syspopup) {
						uni.showModal({
							content: res.data.syspopup
						});
					} else {
						// 关闭启动图进入APP
						// #ifdef APP-PLUS
						setTimeout(() => {
							plus.navigator.closeSplashscreen(); //主动关闭启动图
						}, 100)
						// #endif
					}
					state.adData = res.data.data;
				}
			});
		}
	}
};